vim 和 emacs 的圣战相信大家并不陌生。很多人对这两款编辑器爱不释手,有一个很大的原因是,它们通过多种插件和快捷键,可以完全脱离鼠标操作,并且效率更高。
但在平时工作中,相比 vim 或 emacs,我始终认为好的 IDE 才是第一选择,因为 IDE 做好了各种功能的集成,节约了我们自己调教 vim、emacs 的时间。
IDEA 是我心目中毫无疑问的最好 Java IDE(没有之一)。但平时观察发现,大多数同学使用 IDEA 时,在鼠标和键盘键频繁切换,效率不免大打折扣。因此总结了一些平时我对 IDEA 键盘操作的实践,以供大家参考,希望能有所帮助。
本文中涉及的快捷键基于 IDEA 的默认快捷键配置(Mac OS 10.5+)。
以我个人的使用经验来说,最常用的视图和窗口切换的快捷键操作有:
多个窗口间切换:⌘`
或 ⌘⇧`
多个编辑器间切换:顺序切换⌘⇧[
或 ⌘⇧]
,切换到上一个或下一个⌘[
或 ⌘]
,类似于⌘⇥
的 switcher⌃⇥
project 视图:⌘1
debug 视图:⌘5
(run 为 ⌘4
,但相对不如 debug 常用)
版本控制视图:⌘9
焦点由视图返回编辑器:⎋
打开其他常用视图:⌘⇧E
或⌃⇥
以上这些操作,基本可以概括 90% 以上的使用场景,完全避免鼠标操作。
另外要单独一提的是,大多数 IDEA 中不能输入的视图、弹出框等场景下,可以通过直接键入内容进行搜索,用上下箭头选择确认。如在 project 视图中,可以通过这个操作,快速定位到某个文件夹。
强烈推荐的两种打开文件方式
打开类:⌘O
打开所有类型的文件:⌘⇧O
打开 Java 文件时强烈建议仅使用⌘O
,这将极大的减少筛选文件的范围,尤其是在项目中有大量配置文件的情况下。
不建议使用双击⇧
(打开 search anywhere),一方面可能和第三方中文输入法中英文切换键冲突;另一方面搜索范围太广,筛选不如上面两种方式高效,默认情况下 ⌘O
和 ⌘⇧O
只搜索项目代码内的文件,当项目内匹配不到关键字或再次按下相同的快捷键时,搜索范围才会扩大到引用的包。
此外,⌘⇧E
可以打开弹框,可以很方便的选择最近编辑过的文件。
对于 Java,IDEA 提供了完整的文件间导航
调用和定义间跳转:⌘B
从声明跳转到实现:⌘⌥B
跳转到父类/方法:⌘U
最广为人知的方法就是通过查找定位:
编辑器中通过 ⌘F
唤出搜索框
键入关键字,按上下箭头定位到目标位置
按 ⎋
退出搜索,光标定位到关键词末尾
下面介绍几种同样很实用的定位方式。
几乎所有常用的文件格式都可以通过这种方式定位,包括不限于 Java,XML,properties,HTML/JavaScript/CSS。
通过⌘F12
,唤出当前编辑状态的文件结构。通过搜索可以快速定义到 Java/Javascript 的方法和属性,XML/properties/HTML/CSS 的节点。
试想以下场景:查看生产环境日志中打印了一个错误信息,显示 ErrorClassName 类的 veryLongMethodName 方法抛出了一个异常,具体行数是 300。
怎么样最快的定位到代码的这个位置呢?首先通过⌘O
打开类,这一步应该没什么疑问。接下来怎么做呢?通过⌘F
或者⌘F12
找到这个方法吗?如果方法名前缀重复较多不利于索引筛选,或者方法体过长,定位到最终目标都要废很大劲。
我推荐的做法是,定位到类后,通过 ⌘L
直接输入行号进行定位。在某些知道列号的场景下,输入 行号 列号
还可以直接将光标定位到更准确的位置(按提示可使用 行号:列号
,但冒号显然不如空格输入方便)。
当我们通过以上的一种或几种方式,将期望的光标位置放到了可视区域中,多数同学可能会通过鼠标直接点击或者箭头移动。但既然我们的目标是抛弃鼠标的同时进行高效操作,这些方法当然不能够满足。
这里推荐插件AceJump
。它实现了类似emacs
的 Ace-Jump-Mode。大致步骤如下:
⌃;
进入 AceJump
模式,光标当前位置会出现高亮。
输入要定位的文本。在依次键入的过程中,匹配当前键入的位置会有高亮并且显示相应 tag。
键入 tag 的内容光标定位到该 tag 位置。
如当前可视区域中,我想将光标移动到「varName」前,首先进入 AceJump
模式,然后依次键入「varName」。理想情况下,键入 v 后,由于命中数量较少,tag 为单个字符,此时再键入该 tag,就完成了一次定位。相比方向键移动,效率提升很多。
使用时有三点需要注意:
AceJump
支持全文索引,但跳转到可视范围外需要的操作相对繁琐,因此建议使用上述的其他方式先移动到可视区域。
同样是基于以上理由,如果硬件配置不够好,在大文件中(如文件有上千行时)不推荐使用。
由于光标默认移到关键词前,所以想要定位准确,最好用目标位置后的内容作为关键词。
假设一时间还没办法习惯这些定位技巧,仍然习惯用方向键定位,不妨试试这样操作:
用 ⇞
& ⇟
快速地上下移动光标( mac 原生键盘使用 fn↑
& fn↓
)
用 ⌥←
& ⌥→
快速地左右移动光标
介绍完窗口、视图、文件的导航,接下来的重头戏就是内容编辑了。所有平台通用的复制粘贴就不再赘述了。下面介绍一些我认为较为常用的往往被大家忽视的、可以替换鼠标操作的编辑快捷键。
弹出提示:⌘↩
,最实用的快捷键之一,尤其当有错误或警告时可以按照 IDEA 的建议进行快速修改(当然 IDEA 的建议不一定是对的)。
生成代码:⌘N
,最实用的快捷键之一,快速生成构造函数、Getter/Setter、toString() 方法(代替这三者我认为更好的方案是 lombok
)接口实现、单元测试等通用的代码片段。
选中整个单词:⌥↑
,代替双击单词(实际上是选中上一级文字,选中单词后再次使用会选中语句,再次使用会选中更上一级代码块,以此类推)。
注释/取消注释:⌘/
复制整行:⌘D
删除整行:⌘⌫
上 / 下移整行:⌥⇧↑
或 ⌥⇧↓
格式化内容:⌥⌘L
照例介绍几个最常用的快捷键:
切换 Run Configuration:⌥⌃D
启动运行:⌃R
启动调试:⌃D
停止运行 / 调试:⌘F12
添加 / 删除当前行的断点:⌘F8
。小心不要误操作在方法上加上断点,旧版的 IDEA 中,方法断点会非常消耗性能。
到下一断点:⌥⌘R
单步:F8
步入:F7
,如果当前行有多个方法调用,会按执行顺序进入方法内部,通常需要搭配跳出 ⇧F8
使用。
同样,以 Git 为例,80% 的操作可以通过下面几个快捷键完成。
pull: ⌘T
。要注意的是在 Git 下只会从当前本地分支关联的远程分支拉取
commit: ⌘K
。遗憾的是,默认的 commit 行为会提交整个 changelist,要提交单个文件还得自己手选。
push: ⌘⇧K
以上当然只是 CMS 操作中极少的一部分。但考虑到 coding 中对 CMS 的操作明显不如其他操作高频,另一方面我们也可以在设置中对自己常用的操作设置新的快捷键,这里
以上是我在工作中最常用到的快捷键。作为一篇入门教程,所列举的这些快捷键并不全面。毕竟最佳的实践方案,是根据自己的使用习惯,在 Setting > Keymap
中设置自己最常用、最顺手的快捷键组合。
最后留几个默认的快捷键给感兴趣的同学尝试。
⌥F1
⌘⇧U
⌘⌥⇧[
& ⌘⌥⇧]
⌘Y